home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / prog / bcc101.zip / QBCODE.ZIP / CHECKWIN.BAS next >
BASIC Source File  |  1993-03-20  |  4KB  |  99 lines

  1. '*********************************************************************
  2. '*                         CHEKWIN.BAS                               *
  3. '*                                                                   *
  4. '*   This program will determine whether Windows is running and, if  *
  5. '*   so, its operating mode.                                         *
  6. '*   QuickBASIC must be loaded, as follows: QB /L QB                 *
  7. '*   Copyright 1993 by John Riherd                                   *
  8. '*********************************************************************
  9. DEFINT A-Z 
  10. DECLARE FUNCTION ChekWindows% (Ver1 AS INTEGER, Ver2 AS INTEGER)
  11.                                                                                 
  12.  
  13. '$INCLUDE: 'Qb.bi'           'Include file for interrupt calls
  14.                                                                                 
  15.  
  16. CONST MULTIPLEX = &H2F       'multiplex interrupt number
  17. CONST NOWIN = &H0            'Return for no Windows
  18. CONST WIN386 = &H1           'Return for Windows-386 V2.?
  19. CONST REAL = &H81            'Return for Windows in real mode
  20. CONST STANDARD = &H82        'Return for Windows in standard mode
  21. CONST ENHANCED = &H83        'Return fo Windows in enhanced mode
  22.                                                                                 
  23.  
  24. DIM WellIsIt AS INTEGER
  25. DIM Ver1 AS INTEGER           'Primary version number
  26. DIM Ver2 AS INTEGER           'Secondary version number
  27.                                                                                 
  28.   
  29. WellIsIt = ChekWindows%(Ver1, Ver2)   'Do the test and return values
  30. SELECT CASE WellIsIt
  31.   CASE NOWIN
  32.     PRINT "Windows is not running"
  33.   CASE WIN386
  34.     PRINT "Windows-386 V 2.? is running"
  35.   CASE REAL
  36.     PRINT "Windows is running in real mode"
  37.   CASE STANDARD
  38.     PRINT "Windows is running in standard mode"
  39.   CASE ENHANCED
  40.     PRINT "Windows Vers. "; LTRIM$(STR$(Ver1)); ".";
  41.     PRINT LTRIM$(STR$(Ver2)); " is running in enhanced mode"
  42. END SELECT
  43.  
  44. FUNCTION ChekWindows% (Ver1 AS INTEGER, Ver2 AS INTEGER)
  45.                                                                                 
  46.  
  47. DIM Regs AS RegTypeX         'Processor registers for interrupt call
  48. DIM VBuffer AS INTEGER       'To store version number
  49.                                                                                 
  50.  
  51. Ver1 = 0                     'Initialize version numbers
  52. Ver2 = 0
  53.                                                                                 
  54.  
  55. Regs.ax = &H1600             'Function number
  56. CALL INTERRUPTX(MULTIPLEX, Regs, Regs)
  57.  
  58. VBuffer = Regs.ax            'Set regs.AX
  59.                                                                                 
  60.  
  61. SELECT CASE VBuffer MOD 256  'Get the low byte of AX
  62.  
  63. CASE &H1, &HFF               'Windows-386 running
  64.     Ver1 = 2                 'Primary version
  65.     Ver2 = 0                 'Secondary version is unavailable
  66.     ChekWindows% = WIN386
  67.  
  68. CASE &H0, &H80
  69.     Regs.ax = &H4680         'Check for real or standard mode
  70.     CALL INTERRUPTX(MULTIPLEX, Regs, Regs)
  71.     
  72.     IF (Regs.ax MOD 256) = &H80 THEN 'Check if Windows is running
  73.          ChekWindows% = NOWIN                'No
  74.     ELSE                     'Check for real or standard mode
  75.          Regs.ax = &H1605    'Set registers and function
  76.          Regs.bx = &H0
  77.          Regs.si = &H0
  78.          Regs.cx = &H0
  79.          Regs.es = &H0
  80.          Regs.ds = &H0
  81.          Regs.dx = &H1
  82.          CALL INTERRUPTX(MULTIPLEX, Regs, Regs)
  83.          
  84.          IF Regs.cx = &H0 THEN  'Check for real mode
  85.               ChekWindows% = REAL
  86.          ELSE                   'Windows in standard mode
  87.               ChekWindows% = STANDARD
  88.          END IF
  89.     END IF
  90.  
  91. CASE ELSE
  92.     Ver1 = VBuffer AND &HF   'Get the low byte for primary version
  93.     Ver2 = VBuffer \ 256     'Get the high byte for second. version
  94.     ChekWindows% = ENHANCED
  95. END SELECT
  96.                                                                                 
  97.  
  98. END FUNCTION
  99.